package com.yupi.springbootinit.utils;

import io.github.briqt.spark4j.SparkClient;
import io.github.briqt.spark4j.constant.SparkApiVersion;
import io.github.briqt.spark4j.exception.SparkException;
import io.github.briqt.spark4j.model.SparkMessage;
import io.github.briqt.spark4j.model.SparkSyncChatResponse;
import io.github.briqt.spark4j.model.request.SparkRequest;
import io.github.briqt.spark4j.model.response.SparkTextUsage;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

@Slf4j
public class AiUtils {
     static SparkClient sparkClient = new SparkClient();

    // 设置认证信息
    public static String doChat(String date) {
        sparkClient.appid = "959034cd";
        sparkClient.apiKey = "3135d9899e19380cce43dd49c8f7e3ce";
        sparkClient.apiSecret = "NWMzZGJmYWFiNjk4NjMwMDg0NGUwZWFm";

        // 消息列表，可以在此列表添加历史对话记录
        List<SparkMessage> messages = new ArrayList<>();
        messages.add(SparkMessage.systemContent(
        "你是一个数据分析师和前端者，我会按照以下固定格式给你提供内容：\n" +
        "分析需求：\n" +
        "{数据分析的需求或者目标}\n" +
        "原始数据：\n" +
        "{csv格式的原始数据，用,作为分隔符}\n" +
        "请根据这两部分内容，按照以下指定格式生成内容\n" +
        "{生成前端 Echarts V5 的 option 配置对象json代码,之后结合图表类型的特点，给出明确的数据分析结论}\n" +
        "示例如下：\n" +
        "```json\n" +
        "{\n" +
        "  \"xAxis\": {\n" +
        "    \"type\": \"category\",\n" +
        "    \"data\": [\"1日\", \"2日\", \"3日\"]\n" +
        "  },\n" +
        "  \"yAxis\": {\n" +
        "    \"type\": \"value\"\n" +
        "  },\n" +
        "  \"series\": [\n" +
        "    {\n" +
        "      \"data\": [1, 2, 3],\n" +
        "      \"type\": \"line\"\n" +
        "    }\n" +
        "  ]\n" +
        "}\n" +
        "```\n" +
        "\n" +
        "根据提供的数据，从1日到3日，网站用户数呈现逐日增长的趋势。具体来说，1日有1个用户，2日增加到2个用户，3日进一步增加到3个用户。这表明在观察期内，网站的用户数量每天都在增加，显示出良好的增长势头。\n"
        ));

//        messages.add(SparkMessage.userContent("分析需求：\n" +
//                "分析网站用户的增长情况\n" +
//                "原始数据：\n" +
//                "日期,用户数\n" +
//                "1号,10\n" +
//                "2号,12\n" +
//                "3号,30"));

        //用户输入的问题
        messages.add(SparkMessage.userContent(date));


// 构造请求
        SparkRequest sparkRequest = SparkRequest.builder()
// 消息列表
                .messages(messages)
// 模型回答的tokens的最大长度,非必传
// V1.5取值为[1,4096]
// V2.0取值为[1,8192]
// V3.0取值为[1,8192]
                .maxTokens(4096)
// 核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高 非必传,取值为[0,1],默认为0.5
                .temperature(0.2)
// 指定请求版本，默认使用最新4.0版本
                .apiVersion(SparkApiVersion.V4_0)
                .build();

        try {
            // 同步调用
            SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
            SparkTextUsage textUsage = chatResponse.getTextUsage();

//            System.out.println(chatResponse.getContent());
            //将结果返回
            return chatResponse.getContent();

//            System.out.println("\n提问tokens：" + textUsage.getPromptTokens()
//                    + "，回答tokens：" + textUsage.getCompletionTokens()
//                    + "，总消耗tokens：" + textUsage.getTotalTokens());
        } catch (SparkException e) {
            System.out.println("发生异常了：" + e.getMessage());
        }
        return null;
    }
}
